#include <iostream>
#include <Windows.h>
using namespace std;


int main()
{
	int screenWidth = 80;  // 显示屏幕宽度
	int screenHeight = 30;  // 显示屏幕长度
	int fieldWidth = 12;  // 游戏场地的宽度
	int fieldHeight = 18;  // 游戏场地的高度

	// 场地地图元素标识
	unsigned char* fieldArr = new unsigned char[fieldWidth * fieldHeight];  // 定义游戏场地表示元素的数组，空为0，边界为9-#
	for (int x = 0; x < fieldWidth; ++x)
		for (int y = 0; y < fieldHeight; ++y)
			fieldArr[y * fieldWidth + x] = (x == 0 || x == fieldWidth - 1 || y == fieldHeight - 1) ? 9 : 0;  // U形状的地图边界

	// 屏幕地图元素数组创建初始化
	wchar_t* screenArr = new wchar_t[screenWidth * screenHeight];
	for (int i = 0; i < screenWidth*screenHeight; ++i) screenArr[i] = L' ';  // 屏幕先都初始化为空，在绘画显示到屏幕上的时候进行显示

	HANDLE hConsole = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);  // 创建缓冲区句柄
	SetConsoleActiveScreenBuffer(hConsole);  // 设置活动屏幕缓冲区
	DWORD dwBytesWritten = 0;  // 接收实际写入的字符数

	// 游戏循环-开始
	bool gameOver = false;
	while (!gameOver)
	{
		// 绘制游戏
		for (int x = 0; x < fieldWidth; ++x)
			for (int y = 0; y < fieldHeight; ++y)
				screenArr[(y + 2) * screenWidth + (x + 2)] = L" ABCDEFG=#"[fieldArr[y * fieldWidth + x]];  // 这里的实现非常优雅

		WriteConsoleOutputCharacter(hConsole, screenArr, screenWidth * screenHeight, { 0, 0 }, &dwBytesWritten);// 注意渲染的字符数组需要wchar_t类型的
	}

	return 0;
}
